#include <REGX52.h>
#include <INTRINS.h>
#include "Delay.h"

//P3^5表示P3的第5位
sbit SER = P3^4;	//SER, 写入的1位数据
sbit RCK = P3^5;   	//RCLK, 上升沿锁存，置1发送8位数据
sbit SRCK = P3^6;	//SRCLK, 上升沿移位，置1数据往下移

/**
  * @brief	74HC595发送一个字节数据，可控制点阵屏的行
  * @parm	Byte:要发送的字节数据
  * @retval	无
  */
void _74HC595_WriteByte(unsigned char Byte)
{
	int i = 0;
	for(i = 0; i < 8; ++i)
	{
		SER = (Byte & (0x80 >> i));//SER为1位数据，非0即1
		SRCK = 1;//数据移位
		SRCK = 0;
	}
	RCK = 1;//发送数据
	RCK = 0;
}
/**
  * @brief	LED点阵屏显示一列数据
  * @parm	
  * @retval	无
  */
void MatrixLED_ShowColumn(unsigned char Column, unsigned char Data)
{
	_74HC595_WriteByte(Data);
	P0 = ~(0x80 >> Column);
	Delayms(1);
	P0 = 0xFF;//消影
}

void main()
{
	SRCK = 0;
	RCK = 0;
	
    while(1)
    {
		//显示笑脸
		MatrixLED_ShowColumn(0, 0x3C);
		MatrixLED_ShowColumn(1, 0x42);
		MatrixLED_ShowColumn(2, 0xA9);
		MatrixLED_ShowColumn(3, 0x85);
		MatrixLED_ShowColumn(4, 0x85);
		MatrixLED_ShowColumn(5, 0xA9);
		MatrixLED_ShowColumn(6, 0x42);
		MatrixLED_ShowColumn(7, 0x3C);
    }
}